package com.example.clock_demo.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.example.clock_demo.dto.PunchRecordRequestDTO;
import com.example.clock_demo.entitys.PunchRecord;

import java.time.LocalDate;
import java.util.List;


/**
 * 原始打卡记录服务接口
 */
public interface PunchRecordService extends IService<PunchRecord> {
    /**
     * 查询某个员工在指定日期范围内的所有有效打卡记录
     * @param employeeNumber 工号
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 该员工在指定日期范围内的有效打卡记录列表
     */
    List<PunchRecord> getValidPunchRecordsForEmployeeByDateRange(String employeeNumber, LocalDate startDate, LocalDate endDate);
    /**
     * 记录原始打卡，并判断打卡是否有效。
     * @param requestDTO 包含班组名字、姓名、工号、打卡时间
     * @return 保存后的 PunchRecord 对象，其中包含 isValid 字段
     */
    PunchRecord recordPunch(PunchRecordRequestDTO requestDTO);


    /**
     * 查询任意人员在指定时间段内的考勤记录，支持模糊查询和分页。
     * @param startDate 查询开始日期 (yyyy-MM-dd)
     * @param endDate 查询结束日期 (yyyy-MM-dd)
     * @param teamName 班组名称 (模糊查询，可选)
     * @param employeeName 姓名 (模糊查询，可选)
     * @param pageNum 当前页码 (从1开始)
     * @param pageSize 每页记录数
     * @return 分页的原始打卡记录列表
     */
    Page<PunchRecord> searchPunchRecords(
            LocalDate startDate,
            LocalDate endDate,
            String teamName,
            String employeeName,
            long pageNum,
            long pageSize
    );
}